#include <stdio.h>
#include <string.h>

// 定义Student结构体
struct Student
{
  char name[20]; // 学生姓名
  int id;        // 学生学号
  int age;
};

int main()
{
  // 初始化一个包含3个元素的Student数组
  struct Student students[3] = {
      {"Alice", 1001, 20},
      {"Bob", 1002, 21},
      {"Charlie", 1003, 22}};

  // 定义结构体指针，指向数组首元素
  struct Student *ptr = students;

  // 方式1：图中的下标访问方式
  printf("===== 下标访问方式 =====\n");
  for (int i = 0; i < 3; i++)
  {
    printf("学生%d:\n", i + 1);
    printf("  姓名: %s\n", students[i].name);
    printf("  学号: %d\n", students[i].id);
    printf("  年龄: %d\n", students[i].age);
    printf("\n");
  }

  // 方式2：指针访问方式（与图中写法对比）
  printf("\n===== 指针访问方式 =====\n");
  for (int i = 0; i < 3; i++)
  {
    // 通过指针访问第i个元素的成员
    printf("学生%d:\n", i + 1);
    printf("  姓名: %s\n", (ptr + i)->name); // 等价于 ptr[i].name
    printf("  学号: %d\n", (ptr + i)->id);   // 等价于 ptr[i].id
    printf("  年龄: %d\n", (ptr + i)->age);  // 等价于 ptr[i].age
    printf("\n");
  }

  return 0;
}
